package com.thh.create;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.net.InetAddress;

/**
 * 演示创建ES的映射【Mapping】
 */
public class App06_CreateMapping {

    //定义客户端
    TransportClient client;

    /*
    创建映射，需要索引已经存在；
    另外注意：如果已经存在mapping不能覆盖
     */
    @Test
    public void test1() throws Exception  {

        XContentBuilder builder = XContentFactory.jsonBuilder();
        builder.startObject()
                .startObject("book")
                .startObject("properties")
                .startObject("price").field("type","long").endObject()
                .startObject("bookdesc").field("type","text").field("analyzer","ik_max_word").endObject()
                .startObject("id").field("type","long").field("store",true).endObject()
                .startObject("pic").field("type","text").field("store",true).field("index",false).endObject()
                .startObject("bookname").field("type","text").field("analyzer","ik_max_word").field("store",true).endObject()
                .endObject()
                .endObject()
                .endObject();

        //删除索引
        client.admin().indices()
                .preparePutMapping("xiaofeifei_index") //在那个索引中创建映射
                .setType("book") //设置类型
                .setSource(builder) //传入映射json对象
                .get() //执行操作
        ;


    }



    //初始化
    @Before
    public void init() throws Exception {
        //1、创建一个Settings对象，相当于一个配置信息。主要配置集群的名称。 cluster.name配置集群名称
        Settings settings = Settings.builder().put("cluster.name","elasticsearch").build();
        //2、创建一个客户端client对象。
        client = new PreBuiltTransportClient(settings);
        //3、使用client对象创建一个索引库。
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"),9300));
    }

    //释放资源
    @After
    public void close(){
        //4、关闭client对象。
        client.close();
    }
}
